『オブ脳』やってみんべか(仮)

『オブ脳』(『オブジェクト脳のつくり方』牛尾剛著、翔泳社、2,800円也)
という本を読んでみましょう、というテーマでページを作ろうかと思いますが、
とりあえず、仮版です。

「第1部 オブジェクト脳育成への道」で、『社長命令・起立!』という
プログラムをJavaで組みます。そして、勉強しながら、だんだんそれを拡張して
いきます。

とりあえず、私が本を読みながら作ってみたプログラムのソースコードを載せて
おきます。私が本を読みながら思ったことなどを交えながら、原書とはちょっと
違った角度で徐々に解説してみたいと思います。


ソースコードは解説とともに徐々に説明します。今はとりあえず載せるだけ。

※ 以下、不等号は全角で書いてありますが半角に読み替えてください。
(うーむ、タブは全部消されちゃうのか…)


package president;

public class Nanore {
public static void main(String[] args) {
try {
if(args.length<1 || 3<args.length) {
System.err.println("Shacho ver.3-20");
System.err.println("Usage: java president.Nanore <Yakushoku> [<name>] [<base>]");
System.exit(-1);
}
Shain shain = ShainFactory.factory(args);
if (args.length <3) {
shain.standup();
shain.saySalary();
} else {
shain.standup2();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

class ShainFactory {
static Shain factory(String[] args) {
String type = args[0];
String name = "";
int base = -1;
String orgBase = args[args.length-1];
if (args.length > 1) {
try {
base = Integer.parseInt(orgBase);
orgBase = ""; // reset orgBase, when parseInt succeeded
if (args.length>2) {
name = args[1];
}
} catch (NumberFormatException e) {
name = args[1];
if (args.length==2) orgBase = "";
// reset orgBase, when second & last argument is name (not number)
}
}
if(type.equals("Tanto")) {
return new Tanto(type, name, base, orgBase);
} else if(type.equals("Shunin")) {
return new Shunin(type, name, base, orgBase);
} else if(type.equals("Bucho")) {
return new Bucho(type, name, base, orgBase);
} else if(type.equals("Torishimariyaku")) {
return new Torishimariyaku(type, name, base, orgBase);
} else {
return new Shain(type, name, base, orgBase);
}
}
}

class Shain {
protected String title = "";
protected String name = "";
protected int base = -1;
protected String orgBase = "";

// public Shain() {
// title = "役職不明";
// }
public Shain(String type, String name, int base, String orgBase) {
title = "役職:" + type;
this.name = name;
this.base = base;
this.orgBase = orgBase;
}
public String getYakushoku() {
return title;
}
void standup(){
System.out.println("社員 " + getYakushoku() + " が起立しました。");
}
void saySalary() {
if (base>=0) {
System.out.println("私の給料は" + calcSalary() + "円です。");
System.out.println("ボーナスは" + getBonus() + "円です。");
} else {
System.out.println(getYakushoku() + " " + getName() + " 基本給不明です。");
if (name!="" && orgBase!="") System.out.println("想定外の引数:" + orgBase);
}
}
void standup2() {
if (base>=0) {
System.out.println(getYakushoku() + " " + getName()
+ " 起立しました。給料は"+calcSalary()+"円です。");
} else {
System.out.println(getYakushoku() + " " + getName()
+ " 起立しました。基本給不明です。");
if (name!="" && orgBase!="") System.out.println("想定外の引数:" + orgBase);
}
}
void setName(String name) {
this.name = name;
}
String getName() {
if (name == "") {
return "氏名不詳";
} else {
return name;
}
}
public void setBase(int base) {
this.base = base;
}
int calcSalary() {
return base;
}
int getBonus() {
return base * 3;
}
}


class Tanto extends Shain{
Tanto (String type, String name, int base, String org) {
super(type, name, base, org);
}
public String getYakushoku() {
super.title = "担当";
return super.title;
}
void standup() {
System.out.println("担当が普通に起立しました。");
}
}

class Shunin extends Shain {
Shunin(String type, String name, int base, String org) {
super(type, name, base, org);
}
public String getYakushoku() {
return "主任";
}
void standup() {
System.out.println("主任がすばやく立ちました。");
}
int calcSalary() {
return super.base * 2 + 1;
}
}

class Bucho extends Shain {
Bucho(String type, String name, int base, String org) {
super(type, name, base, org);
}
public String getYakushoku() {
return "部長";
}
void standup() {
System.out.println("部長がだるそうに立ちました。");
}
int calcSalary() {
return super.base * 3;
}
}

class Torishimariyaku extends Shain {
Torishimariyaku(String type, String name, int base, String org) {
super(type, name, base, org);
}
public String getYakushoku() {
return "取締役";
}
void standup() {
System.out.println("取締役がふんぞり返って立ちました。");
}
int calcSalary() {
return super.base * 4 + 2;
}
}


© Rakuten Group, Inc.